package check

import (
	"reflect"
)

// IsRealNil 判断是否nil
// interface类型既要type是nil, 绑定的值也是nil才算是nil
func IsRealNil(v any) bool {
	if v == nil {
		return true
	}

	return func() (ret bool) {
		defer func() {
			if err := recover(); err != nil {
				// 发生panic, 意味着v的类型不支持IsNil, 例如string, int等, 此类类型不可能是nil, 直接置为true
				ret = false
			}
		}()

		return reflect.ValueOf(v).IsNil()
	}()
}
